package model

import (
	"smart-health-platforms/config"
	"time"
)

// 发票管理表
type Invoice struct {
	Id           uint32    `gorm:"column:id;type:int UNSIGNED;comment:发票唯一id;primaryKey;not null;" json:"id"`                                  // 发票唯一id
	OrderSn      string    `gorm:"column:order_sn;type:varchar(200);comment:订单号;not null;" json:"order_sn"`                                    // 订单号
	UserId       uint32    `gorm:"column:user_id;type:int UNSIGNED;comment:申请人;not null;" json:"user_id"`                                      // 申请人
	Amount       float64   `gorm:"column:amount;type:decimal(10, 2);comment:开票总金额;not null;" json:"amount"`                                    // 开票总金额
	Status       int32     `gorm:"column:status;type:int;comment:审核状态：0待审核 1已通过 2已驳回;not null;default:0;" json:"status"`                       // 审核状态：0待审核 1已通过 2已驳回
	Title        string    `gorm:"column:title;type:varchar(200);comment:个人抬头;default:NULL;" json:"title"`                                     // 个人抬头
	ComTitle     string    `gorm:"column:com_title;type:varchar(200);comment:公司抬头;default:NULL;" json:"com_title"`                             // 公司抬头
	CreatedAt    time.Time `gorm:"column:created_at;type:datetime(3);comment:发票申请时间;not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"` // 发票申请时间
	ReviewerId   uint32    `gorm:"column:reviewer_id;type:int UNSIGNED;comment:审核人id;default:NULL;" json:"reviewer_id"`                        // 审核人id
	ReviewerTime time.Time `gorm:"column:reviewer_time;type:datetime;comment:审核完成时间;default:NULL;" json:"reviewer_time"`                       // 审核完成时间
	ReviewerSeal string    `gorm:"column:reviewer_seal;type:varchar(300);comment:审核公章url;default:NULL;" json:"reviewer_seal"`                  // 审核公章url
	ReviewerNote string    `gorm:"column:reviewer_note;type:varchar(500);comment:审核意见;" json:"reviewer_note"`                                  // 审核意见
}

// 设置与数据库表的映射关系
func (i *Invoice) TableName() string {
	return "invoice"
}

// 添加发票
func (i *Invoice) Create() error {
	return config.DB.Create(&i).Error
}

// 获取未审核发票列表
func (i *Invoice) GetUnReviewList() (invoiceList []*Invoice, err error) {
	err = config.DB.Where("status =?", 0).Find(&invoiceList).Error
	return
}

// 发票审核
func (i *Invoice) Review() error {
	return config.DB.Where("order_sn=?", i.OrderSn).Limit(1).Find(&i).Error
}

// 发票状态修改
func (i *Invoice) UpdateStatus() error {
	return config.DB.Model(&i).Where("order_sn=?", i.OrderSn).Updates(&i).Error
}

// 获取全部发票列表
func (i *Invoice) ReviewList() (invoiceList []*Invoice, err error) {
	err = config.DB.Find(&invoiceList).Error
	return
}

// 获取发票详情
func (i *Invoice) ReviewDetail(invoiceID int) error {
	return config.DB.Where("id = ?", invoiceID).Limit(1).Find(&i).Error
}
